// import puppeteer from 'puppeteer'
import puppeteer from 'puppeteer-extra'
import StealthPlugin from 'puppeteer-extra-plugin-stealth'

puppeteer.use(StealthPlugin())

export default class NM {
  constructor(ctx) {
    this.ctx = ctx
    this.init()
  }

  async init() {
    const browser = await puppeteer.launch({
      userDataDir: 'd:/puppeteer',
      headless: false,
      // defaultViewport: { width: 1366, height: 800 }, // 设置默认视口大小
      // defaultViewport: { width: 1920, height: 1080 }, // 设置默认视口大小
    })

    this.browser = browser
  }

  async chat(text) {
    const { browser } = this

    const page = await browser.newPage({
      waitUntil: 'networkidle0',
    })
    await page.goto('https://bot.n.cn/')

    // 获取屏幕的最大分辨率
    const dimensions = await page.evaluate(() => {
      return {
        width: window.screen.width,
        height: window.screen.height,
      }
    })

    // 设置视口为屏幕的最大分辨率
    await page.setViewport({
      width: dimensions.width,
      height: dimensions.height,
    })

    // await page.waitForSelector('.home-input-wrap textarea')

    // 输入文本
    // await page.type('.home-input-wrap textarea', text)

    // 将内容复制到剪贴板
    await page.evaluate(text => {
      console.log('将内容复制到剪贴板')

      // 创建一个临时的 textarea 元素
      const textarea = document.createElement('textarea')
      textarea.value = text
      document.body.appendChild(textarea)

      // 选中 textarea 中的内容
      textarea.select()
      document.execCommand('copy') // 复制到剪贴板

      // 移除临时的 textarea 元素
      document.body.removeChild(textarea)
    }, text)

    // 聚焦到目标输入框（假设页面中有一个输入框）
    await page.focus('.home-input-wrap textarea')

    // 模拟粘贴操作（Windows/Linux: Control + V, Mac: Command + V）
    await page.keyboard.down('Control') // Windows/Linux
    // await page.keyboard.down('Meta'); // Mac
    await page.keyboard.press('V')
    await page.keyboard.up('Control') // Windows/Linux

    // await new Promise(resolve => {
    //   setTimeout(() => {
    //     resolve()
    //   }, 1000 * 100000)
    // })

    // click
    await page.click('.send-btn')

    await page.waitForFunction(
      () => {
        return document.body.innerText.includes('回答耗时')
      },
      { timeout: 300 * 1000 } // 300秒
    )

    console.log('完成回答')

    // 提取markdown-container的内容
    const result = await page.evaluate(() => {
      return document.querySelector('.markdown-container').innerHTML
    })

    page.close()

    return result
  }
}
